package com.canaan.business.mapper.agv;

import com.canaan.business.domain.agv.AgvTaskDispatch;
import com.canaan.business.domain.vo.AgvExecuteTaskTime;
import com.canaan.business.domain.vo.AgvTaskNumVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * AGV任务调度Mapper接口
 *
 * @author
 * @date 2023-03-02
 */
public interface AgvTaskDispatchMapper {
    /**
     * 查询AGV任务调度
     *
     * @param id AGV任务调度主键
     * @return AGV任务调度
     */
    public AgvTaskDispatch selectAgvTaskDispatchById(Long id);

    /**
     * 查询AGV任务调度列表
     *
     * @param agvTaskDispatch AGV任务调度
     * @return AGV任务调度集合
     */
    public List<AgvTaskDispatch> selectAgvTaskDispatchListOrderByIdDesc(AgvTaskDispatch agvTaskDispatch);

    /**
     * 查询AGV任务调度列表
     *
     * @param agvTaskDispatch AGV任务调度
     * @return AGV任务调度集合
     */
    public List<AgvTaskDispatch> selectAgvTaskDispatchList(AgvTaskDispatch agvTaskDispatch);
    /**
     * 查询AGV起点有未出库任务
     *
     * @param startPoint 终点库位
     * @return AGV任务调度集合
     */
    List<AgvTaskDispatch> selectAgvTaskDispatchListByStartPoint(String startPoint);

    List<AgvTaskDispatch> selectAgvTaskDispatchListByTrayNo(String trayNo);
    /**
     * 查询AGV任务正在运行的任务列表(非END状态)
     *
     * @param endPoint AGV任务调度
     * @return AGV任务调度集合
     */
    public List<AgvTaskDispatch> selectAgvTaskDispatchListByEndPoint(@Param("endPoint")String endPoint);

    /**
     * 新增AGV任务调度
     *
     * @param agvTaskDispatch AGV任务调度
     * @return 结果
     */
    public int insertAgvTaskDispatch(AgvTaskDispatch agvTaskDispatch);

    /**
     * 批量新增AGV任务调度
     *
     * @param agvTaskDispatchList AGV任务调度列表
     * @return 结果
     */
    public int batchInsertAgvTaskDispatch(List<AgvTaskDispatch> agvTaskDispatchList);

    /**
     * 修改AGV任务调度
     *
     * @param agvTaskDispatch AGV任务调度
     * @return 结果
     */
    public int updateAgvTaskDispatch(AgvTaskDispatch agvTaskDispatch);

    /**
     * 批量修改AGV任务调度
     *
     * @param agvTaskDispatchList AGV任务调度列表
     * @return 结果
     */
    public int batchUpdateAgvTaskDispatch(List<AgvTaskDispatch> agvTaskDispatchList);

    /**
     * 删除AGV任务调度
     *
     * @param id AGV任务调度主键
     * @return 结果
     */
    public int deleteAgvTaskDispatchById(Long id);

    /**
     * 批量删除AGV任务调度
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteAgvTaskDispatchByIds(Long[] ids);

    /**
     * 查询Agv执行的任务数量
     *
     * @return AgvTaskNumDto
     * @author
     */
    List<AgvTaskNumVo> findAgvExecuteTaskNum();

    /**
     * 查询Agv执行任务总时间
     *
     * @return AgvTaskNumDto
     */
    List<AgvExecuteTaskTime> getAgvExecuteTaskSumTime();
    /**
     * 根据起点查询正在执行的任务数
     * @param pointCode
     * @return
     */
    int queryRunningTaskByStartPoint(String pointCode);
    /**
     * 根据终点查询正在执行的任务数
     * @param pointCode
     * @return
     */
    int queryRunningTaskByEndPoint(String pointCode);
    /**
     * 点位正在执行的任务数
     * @param pointCode
     * @return
     */
    int queryRunningTaskByPoint(String pointCode);

    /**
     * 点位正在执行的出库任务数，状态排除OUTBIN
     *
     * @param pointCode
     * @param taskType
     * @return
     */
    int queryOutTaskByPoint(@Param("pointCode") String pointCode, @Param("taskType") String taskType);

    /**
     * 货架正在执行的任务数
     * @param containerNo
     * @return
     */
    int queryRunningTaskByShelfNo(String containerNo);

    /**
     * 托盘正在执行的任务数
     * @param trayNo
     * @return
     */
    int queryRunningTaskByTrayNo(String trayNo);

}
